{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7b4fff9e",
   "metadata": {},
   "source": [
    "# 逻辑回归实验（MNIST & CIFAR-10）\n",
    "\n",
    "本实验将使用逻辑回归模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ]
  },
  {
   "cell_type": "code",
   "id": "0385b259",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:23.213478Z",
     "start_time": "2025-05-22T14:43:19.317041Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "id": "2be18b18",
   "metadata": {},
   "source": [
    "## 加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "id": "d6958042",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:24.548355Z",
     "start_time": "2025-05-22T14:43:23.213478Z"
    }
   },
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "id": "062fbc43",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "id": "ff2b96f6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:38.640320Z",
     "start_time": "2025-05-22T14:43:24.677245Z"
    }
   },
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 5000\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:1000], y_test_m[:1000]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:1000], y_test_c[:1000]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "outputs": [],
   "execution_count": 3
  },
  {
   "cell_type": "markdown",
   "id": "5d9f3df5",
   "metadata": {},
   "source": [
    "## 逻辑回归模型训练与评估"
   ]
  },
  {
   "cell_type": "code",
   "id": "b9913380",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:40.627341Z",
     "start_time": "2025-05-22T14:43:38.648908Z"
    }
   },
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "lr_mnist = LogisticRegression(max_iter=100)\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(lr_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST 逻辑回归准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "lr_cifar = LogisticRegression(max_iter=100)\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(lr_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 逻辑回归准确率: {acc_c:.3f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST 逻辑回归准确率: 0.874\n",
      "CIFAR-10 逻辑回归准确率: 0.274\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\machineLearning\\venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:465: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "id": "4d4488e9",
   "metadata": {},
   "source": [
    "## 可视化分析"
   ]
  },
  {
   "cell_type": "code",
   "id": "55bc18e8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:40.887973Z",
     "start_time": "2025-05-22T14:43:40.700940Z"
    }
   },
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('逻辑回归在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36923 (\\N{CJK UNIFIED IDEOGRAPH-903B}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36753 (\\N{CJK UNIFIED IDEOGRAPH-8F91}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22238 (\\N{CJK UNIFIED IDEOGRAPH-56DE}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24402 (\\N{CJK UNIFIED IDEOGRAPH-5F52}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14380\\379518958.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14380\\379518958.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14380\\379518958.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14380\\379518958.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAHqCAYAAABbfXZsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMGRJREFUeJzt3QucVWW9B/z/MMBwJwQvmHjrIhCYd1PKy1HTMtMszdIiTd9SVNQ0JV8zQ0U9WZqWt0o95bXMNC19PeY176Ae7RhqZpJ3jwoCymVmv59ndYbDCMjMM8Bam/l+P5/lsPdee+8/y2HWf377eZ7VUKvVagEAAADQQd06+gQAAACARKgAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqQDtccskl0dDQUGx33333Io/XarUYNmxY8fhnPvOZNo+1Pu/MM89c4us+9NBDC+773ve+V9z32muvtdn397//fWy77bax2mqrRZ8+fWL99dePvffeO2666abi8e22227Be73Xll4fAOC9/O1vf4tvfOMbRb/Rq1evGDBgQIwZMybOPvvsePvttxfst+666y6x93n3tsYaa7TZ78033yxeOz32xBNPLLaOr33ta21eo6mpKT784Q/Hd7/73XjnnXfa9Xd54IEH4pBDDolNN900evToUbzOe/n5z38eI0aMKGr70Ic+FOecc0673ge6qu5lFwD1JJ1cLr/88vj4xz/e5v477rgj/vnPfxYnuiX593//9zj44IOLQKCjfvCDH8QxxxxThAoTJkwoXuPpp5+O//zP/4wrr7wydtlllzj++OPjwAMPXPCcBx98MH784x/Hd77zneLE2GrDDTdc7Hv89Kc/jaOOOiq6d1/8j4UhQ4bEs88+W9p+AMCKceONN8Zee+1V9DVf/epXY9SoUTF37tzig5XUj/zlL3+JCy+88D1fY6eddiqeu7DevXu3uf3rX/96Qdhw2WWXxcknn7zY10p1/OxnPyv+PH369Ljuuuti4sSJRfCRnrc0f/jDH4rnpx4ohSRPPvnkEve94IIL4pvf/GZ8/vOfL/qTu+66Kw4//PCYPXt2HHvssUt8XjomG2+8cfTs2XOxj6fjl4KTFISUsd8HPvCBJdYOnVYDluriiy+upX8ue+65Z23IkCG1efPmtXn8oIMOqm266aa1ddZZp7brrru2eSw9b6ONNiq+nnnmmYt93QcffHDBfSeeeGJx36uvvlrcTu81YMCA2k477bTY2l5++eXF3v/rX/+6eJ3bbrutXX/Hc845p3b88ccv9rG333679v73v7/U/QCA5e+ZZ56p9evXrzZ8+PDaCy+8sMjjTz31VO2ss85acHtJvc+4ceOW+l7bbLNN0VsdeeSRtfXWW2+x+4wdO7bWt2/fNve1tLTUPvaxj9UaGhpqL7300lLfJ+0ze/bs4s+priX9CpT2GTx48CJ/n3333beo4fXXX1/iezz22GO1MWPGLPHxLbfcsjh2Ze0Hy5PpD9ABX/rSl+J//ud/4pZbbmmTAP/mN7+JL3/5y0t8Xhou+G//9m9xxhlntBky2B5pGsSMGTOK11icNB0CAGBZSL3KzJkziykAQ4cOXeTxD37wgzF+/PhOv89zzz1XjALYZ599iu3vf/973HPPPe16bhrdkEaNpvzimWeeWer+q6+++iKjJBbntttuK/q8NFViYePGjYtZs2YVIziARQkVoAPSvMGtttoqrrjiigX3/fGPfyyG4qUT4ntJaxm8/PLLcd5553XoPVNokE6EaU2F119/Pbt2AIClSf1GmiKw9dZbd+p10rD89MHIwtucOXMWPJ56qb59+xbrMWyxxRbF8Pz2TGVo1To1ctCgQbGsPPzww8XXzTbbrM39aS2Gbt26LXgcaEuoAB2URiT87ne/WzDiIJ0A01oHa6655ns+7xOf+ERsv/32xdoKHRmtkE5iaf7i5MmTY+21145Pf/rTceqpp8aUKVM6/XcBAGiVRkY+//zzMXr06E6/VhrpsOqqq7bZFv5QJvVPu++++4IRBF/84hfj6quvjvnz5y/29VqDibSOQlr8+pprrinWethggw1iWXnxxRejsbFxkVGgab2CwYMHxwsvvLDM3gtWJkIF6KB0xYUUCtxwww3x1ltvFV/fa+rDu0crvPTSS3H++ed36D1POumkYoHItBDPzTffXCzKmFLzTTbZZImrJQMAdDRUSPr379/p10qBQZouuvC28847F4/913/9Vzz22GPFtNJW6c8pNEh9zrulqQetwUSafnH00UcX00LTgo1Lu5JDR6T+bkkLHqbFujs6hRW6Cld/gA5KJ7Qdd9yx+CU/rQTc3NwcX/jCF9r13G222aYYrZDmK6aVhTsinWzTlk74999/f3E5ylTDbrvtFo8//nhxsgMAyJUuG5mkD006a6211ir6pcX51a9+VUx9SNMs0tWsktTHpGmmaQTDrrvu2mb/9FialpGkq22lPuqVV15ps05CWgciba3SiIPUs3VEer20VtaSpnO0Z10G6IqECpAhjUw46KCDilEHn/rUp+J973tfu5974oknxnbbbVdcsqgjz1v4hJ8u05S2dK3lSy+9tAgZ0hQMAIBcqcdI0znThxXLS1pcMU2DSKMPRo4cucjjKSxI4UC/fv3aBAQLBxRpxMPw4cPjG9/4Rlx//fULLr+dRna2WmeddTp8Seq0MGX6sCjVsPAUiBQ0pAUclzbVFboq0x8gw+c+97lirYP77ruv3VMfWqVf/lOocPrpp3d6GF3rQkJpDiAAQGelhRPTugX33nvvcnn9O+64oxht8P3vfz9+/etft9kuvPDCYhRoWrtqab/8H3nkkcXohdSLJV/96lfbTLXoyKKPrTbaaKPi60MPPdTm/nS7paVlweNAW0YqQIaUnqerOKQEPE0/6Ki0tkIKFtLJc2nSyfXRRx8trjrxbunKE8myXKQIAOi6vv3tbxe/kB944IHxpz/9qbgc48JS4JDWk8q9rGTr1Ie0CPXipm6mBa3T+++3337v+TqHHXZYse9pp51WhBBpKkXaOiNd/nuVVVYpery0MHardLtPnz6LTMsA/kWoAJnGjh2b/dw0WiFtKa1vT6iQLuv0sY99LHbZZZcYNmxYvPnmm8UJNF3feY899igWcAQA6Kx0ace0ZlO6GsOIESOKEQDpKgtpCsA999xTjCj42te+lvXa6ZKS6aoNaQrnktaC+uxnPxtnn332IlMQ3i1djWH//fePn/70p8Wi1anWJfnHP/4Rv/zlL9uMQjj55JMXTJP4yle+Uvw5rZkwceLEGDduXOy1117FNIvUa6Ug5JRTTikCB2BRQgUoSRqtkBZtXJq07sJFF10UN954Y1x88cXFOg5pbmEanZAS+sMPP3yF1AsAdA3pF/t0hYbUZ6QrLKRP6puammLDDTcsLueY1pXKkXqZ9MHIe43yTI+l97jyyiuX2uMcddRRxRW10pTStID1kvz973+PE044oc19rbfThzytoUJyyCGHFGtWpRrSeg3pw5wf/ehH2SMzoCsQKkA7pES+Pan84hYESgsSLU6a/rC4x1LYkLZW3bt3L4Ygpq0j0hUplvTeAADv5UMf+lC7pml2pPfZc889l9qbpF/yF94nhQVLCgzSdIf58+cvtcYl9VxLkkKT3OAEuiILNQIAAABZjFQAFkiXYzr33HMX+9jCl3Yqaz8AgKpKV6JY0uXC02Uyy94PlpeGmvHRAAAAQAbTHwAAAIAsQgUAAAAgi1ABAAAA6HoLNba0tMQLL7wQ/fv3j4aGhrLLAaCOpSWG3nrrrVhzzTWjWzeZO/VJbwTAiu6N6jpUSCfNYcOGlV0GACuRadOmxVprrVV2GZBFbwTAiu6N6jpUSCl8suExV0djU5+oopuO/ERU3fzmlqiy7o0+MewKWlqqfSGabt184reye2vGjPjgesMWnFugHrV+/+58xo3Ro3ffqKJzv7BhVN1rb82JKuvXVP0Wfuac+VFlvXpUv7/s1aMxquzZV2ZF1d3zwutRZduvu2pU2ayZb8UuHxux1N6o+j+R3kPrsL4UKDT2quaJc8CAAVF1QgWqQKhAVRgyzsrw/ZsChR69+0UV1UNv9E5UO1To36sOWvh3qh0q9K6HUKFntUOFvm9Xu76kV995UWX9+lf/52F7eqPq/2sCAAAAKkmoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAUL+hwk9+8pNYd911o1evXrHlllvGAw88UHZJAACl0RsBUC9KDxWuuuqqOOqoo+LEE0+MKVOmxEc/+tHYeeed45VXXim7NACAFU5vBEA9KT1U+OEPfxgHHXRQ7L///jFy5Mg4//zzo0+fPvGLX/yi7NIAAFY4vREA9aTUUGHu3LkxefLk2HHHHf+voG7ditv33ntvmaUBAKxweiMA6k33Mt/8tddei+bm5lh99dXb3J9u//Wvf11k/zlz5hRbqxkzZqyQOgEAVgS9EQD1pvTpDx0xadKkGDhw4IJt2LBhZZcEAFAavREAXTpUGDJkSDQ2NsbLL7/c5v50e4011lhk/wkTJsT06dMXbNOmTVuB1QIALF96IwDqTamhQs+ePWPTTTeNW2+9dcF9LS0txe2tttpqkf2bmppiwIABbTYAgJWF3giAelPqmgpJumTS2LFjY7PNNostttgizjrrrJg1a1ax4jEAQFejNwKgnpQeKnzxi1+MV199Nb773e/GSy+9FBtttFHcdNNNiyxQBADQFeiNAKgnpYcKyaGHHlpsAADojQCoH3V19QcAAACgOoQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWbrHSuCmIz8RAwYMiCoatPmhUXVvPHhuVFlLSy2qrlu3hrJLgJjf3BJV1r1Rjg0rymmfGRH9+1ezNzrkN/8VVff/7vChqLKq/7xPeveo9s/8Xj0byy6h7q09pE9U3Z4DmqLKHn7hjaiy2TNntmu/av9rBwAAACpLqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQJbueU+jvf7n/nOi6tY95DdRZVPP/lxUXVO3xqiylpZa2SXUvTnzmssuoe41t1T7GPp/zMpk8j/fiD795kcVnbzL8Ki6yx99Pqps79FrRtU9+epbUWXrr9I3qq5/r2r/qjavufr95TsVP7fvMmKNqLIZM/q0az8jFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAqL9QYdKkSbH55ptH//79Y7XVVos99tgjpk6dWmZJAACl0RsBUG9KDRXuuOOOGDduXNx3331xyy23xLx58+KTn/xkzJo1q8yyAABKoTcCoN50L/PNb7rppja3L7nkkiKVnzx5cmyzzTal1QUAUAa9EQD1ptRQ4d2mT59efF1llVUW+/icOXOKrdWMGTNWWG0AACua3giAqqvMQo0tLS1xxBFHxJgxY2LUqFFLnGc4cODABduwYcNWeJ0AACuC3giAelCZUCHNH3z88cfjyiuvXOI+EyZMKBL71m3atGkrtEYAgBVFbwRAPajE9IdDDz00brjhhrjzzjtjrbXWWuJ+TU1NxQYAsDLTGwFQL0oNFWq1Whx22GFx7bXXxu233x7rrbdemeUAAJRKbwRAvele9rC+yy+/PK677rrieswvvfRScX+aE9i7d+8ySwMAWOH0RgDUm1LXVDjvvPOK+X/bbbddDB06dMF21VVXlVkWAEAp9EYA1JvSpz8AAPAveiMA6k1lrv4AAAAA1BehAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQJbusRJoaakVWxV169YQVTf17M9FlW198q1RdQ+euFNU2TvzmqPqevVoLLuEutejsdo5cUutmj+nWzXWwc9raK9tP7haDBgwIKro9Zlzo+r2Hr1mVNktf3s5qu7jw4ZElT3x6oyouqbGavdGq/Zuiqob1K9nVNmMt+dHlb3Vzvqq3YECAAAAlSVUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgS/e8p9FeLS21qLqmHo1RZZNP+mRU3VoHXhlV9s+f7RNVV/V/K1X/d1IPx3Du/JaosqrXBx3xztzm6DG3Oaro/av0jqp75Nk3o8pGDxkYVXfJw/+MKjt4y3Wi6t56e15U2fzmavcdyfsH9Yoqm1fxYzivZ/v6XyMVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAACo71DhtNNOi4aGhjjiiCPKLgUAoHR6IwDqQSVChQcffDAuuOCC2HDDDcsuBQCgdHojAOpF6aHCzJkzY999942LLrooBg0aVHY5AACl0hsBUE9KDxXGjRsXu+66a+y4445L3XfOnDkxY8aMNhsAwMpEbwRAPele5ptfeeWVMWXKlGKIX3tMmjQpTjrppOVeFwBAGfRGANSb0kYqTJs2LcaPHx+XXXZZ9OrVq13PmTBhQkyfPn3Bll4DAGBloDcCoB6VNlJh8uTJ8corr8Qmm2yy4L7m5ua4884749xzzy2G8zU2NrZ5TlNTU7EBAKxs9EYA1KPSQoUddtghHnvssTb37b///jF8+PA49thjFzlpAgCszPRGANSj0kKF/v37x6hRo9rc17dv3xg8ePAi9wMArOz0RgDUo9Kv/gAAAADUp1Kv/vBut99+e9klAABUht4IgJVypMJdd90V++23X2y11Vbx/PPPF/f98pe/jLvvvntZ1wcAUHl6IwC6qg6HCtdcc03svPPO0bt373j44YeLlYiTdBmjU089dXnUCABQWXojALqyDocKJ598cpx//vlx0UUXRY8ePRbcP2bMmJgyZcqyrg8AoNL0RgB0ZR0OFaZOnRrbbLPNIvcPHDgw3nzzzWVVFwBAXdAbAdCVdThUWGONNeLpp59e5P40Z3D99ddfVnUBANQFvREAXVmHQ4WDDjooxo8fH/fff380NDTECy+8EJdddlkcffTRcfDBBy+fKgEAKkpvBEBX1uFLSh533HHR0tISO+ywQ8yePbsY7tfU1FScOA877LDlUyUAQEXpjQDoyjocKqQE/vjjj49jjjmmGOo3c+bMGDlyZPTr12/5VAgAUGF6IwC6sg6HCq169uxZnDABANAbAdA1dThU2H777YtEfkn+9Kc/dbYmAIC6oTcCoCvrcKiw0UYbtbk9b968eOSRR+Lxxx+PsWPHLsvaAAAqT28EQFfW4VDhRz/60WLv/973vlfMIQQA6Er0RgB0ZR2+pOSS7LfffvGLX/xiWb0cAEBd0xsB0BVkL9T4bvfee2/06tVrWb3cSqNbtyXPsayKlpZaVFlLrdr1Jc9esHdU2X7/MTmq7pJ9N45Ka4nKmzu/2kX2aFxmOXaXrI/6U2Zv1L2xodiqaMbb86Lq5jRX++dpUx38vPrc8NWjyv783KtRdRuu+r6osrWH9Imqmz23OaqsT8/GqLIe7TyPdDhU2HPPPdvcrtVq8eKLL8ZDDz0UJ5xwQkdfDgCgrumNAOjKOhwqDBw4sM3tbt26xQYbbBDf//7345Of/OSyrA0AoPL0RgB0ZR0KFZqbm2P//feP0aNHx6BBg5ZfVQAAdUBvBEBX16EJWY2NjUXi/uabby6/igAA6oTeCICursOrvIwaNSqeeeaZ5VMNAECd0RsB0JV1OFQ4+eST4+ijj44bbrihWIRoxowZbTYAgK5EbwRAV9buNRXSYkPf+ta34tOf/nRx+7Of/Ww0NDS0Wek43U5zCwEAVnZ6IwDoQKhw0kknxTe/+c247bbblm9FAAB1QG8EAB0IFVLanmy77bbLsx4AgLqgNwKADq6psPCQPgCArk5vBEBX1+6RCsmHP/zhpZ48X3/99c7WBABQF/RGAHR13Ts6d3DgwIHLrxoAgDqiNwKgq+tQqLDPPvvEaquttvyqAQCoI3ojALq6dq+pYM4gAMD/0RsBQAdChdYVjgEA0BsBQIemP7S0tDhiAAD/S28EAB28pCQAAABAK6ECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZusdKoKVWK7Yq6hYNZZdQ97o3Vj/7ammp5vdfq4u/vHFU3afOvSeq7ObDxkTV9erZWHYJda1H9+r/rIGOnDt7VPT8+fbc5qi6If16RpX94amXo+qGD+4XVTZylYFRdWN/dn9U2W8P+3hU3aC+PaLK5jXXVor6qnm2AQAAACpPqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAA9RkqPP/887HffvvF4MGDo3fv3jF69Oh46KGHyi4LAKAUeiMA6kn3Mt/8jTfeiDFjxsT2228ff/zjH2PVVVeNp556KgYNGlRmWQAApdAbAVBvSg0VTj/99Bg2bFhcfPHFC+5bb731yiwJAKA0eiMA6k2p0x+uv/762GyzzWKvvfaK1VZbLTbeeOO46KKLlrj/nDlzYsaMGW02AICVhd4IgHpTaqjwzDPPxHnnnRcf+tCH4uabb46DDz44Dj/88Lj00ksXu/+kSZNi4MCBC7aU5AMArCz0RgDUm4ZarVYr68179uxZpPH33HPPgvvSifPBBx+Me++9d7FpfNpapTQ+nTyff+WNGDBgQFRR98bS18JcqpaW0r4F2qVbt4aouqofw+aK15d8+if/93Ogim4+bExUXT38W6mydE5ZffDAmD59emXPKaz8llVv9OyLr1f2+/jtuc1RdW/MmhtV9oenXo6qGz64X1TZqr2bouq+fvEDUWW/PezjUXWD+vaIKutR8d8V0zll3aGrLLU3KvVvMXTo0Bg5cmSb+0aMGBHPPffcYvdvamoq/jILbwAAKwu9EQD1ptRQIa1uPHXq1Db3Pfnkk7HOOuuUVhMAQFn0RgDUm1JDhSOPPDLuu+++OPXUU+Ppp5+Oyy+/PC688MIYN25cmWUBAJRCbwRAvSk1VNh8883j2muvjSuuuCJGjRoVEydOjLPOOiv23XffMssCACiF3giAetO97AI+85nPFBsAAHojAOpLtZebBAAAACpLqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJCle6wEujd2K7Yqmt/cElXX3FKLKutRB9lXt24NZZdQ924+bExU2Q4/ujOq7tYjt4kqmzVnflTZzLfnlV0CdAm9ezZG1b0xKypti6GDoupeffudskuoe7ccs11U2T6/eCCq7ldjN4sqm99Y7d/D3pnb3K79qv/bGgAAAFBJQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALJ0z3sa7dWtoSGqrltjtWuc19wSVdej4vlcS60WVVf1fyu3HPGJqLo9f/ZAVNmvD9g8qmxuj8ayS4Bl5v+b+lL07jcrqmjXEUOj6npV/OfBhsMGRvVVu8a35zZH1XWveI/+m4O2jKpbZ5sjo8quv/zEqLJZM99q137V/k0IAAAAqCyhAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAADUX6jQ3NwcJ5xwQqy33nrRu3fv+MAHPhATJ06MWq1WZlkAAKXQGwFQb7qX+eann356nHfeeXHppZfGRz7ykXjooYdi//33j4EDB8bhhx9eZmkAACuc3giAelNqqHDPPffE7rvvHrvuumtxe911140rrrgiHnjggTLLAgAohd4IgHpT6vSHrbfeOm699dZ48skni9uPPvpo3H333fGpT31qsfvPmTMnZsyY0WYDAFhZ6I0AqDeljlQ47rjjipPf8OHDo7GxsZhHeMopp8S+++672P0nTZoUJ5100gqvEwBgRdAbAVBvSh2pcPXVV8dll10Wl19+eUyZMqWYP/iDH/yg+Lo4EyZMiOnTpy/Ypk2btsJrBgBYXvRGANSbUkcqHHPMMUUiv88++xS3R48eHf/4xz+K1H3s2LGL7N/U1FRsAAArI70RAPWm1JEKs2fPjm7d2paQhvq1tLSUVhMAQFn0RgDUm1JHKuy2227FPMG11167uGzSww8/HD/84Q/jgAMOKLMsAIBS6I0AqDelhgrnnHNOnHDCCXHIIYfEK6+8EmuuuWZ84xvfiO9+97tllgUAUAq9EQD1ptRQoX///nHWWWcVGwBAV6c3AqDelLqmAgAAAFC/hAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZuuc9jfbq1q0hqq6lpVZ2CXWvpVbtY9i9UX7YWXPntkTV/e7/2TKq7BOn3x5V1vzOrLJLgGVmxJAB0a//gKiiL/z8gai633x9i6iy3j0bo+pmvD0vqqx7Y/V79D4V///88vQ5UXU/ueCYqLITrvvvqLL57eyN/KYBAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAECW7lHHarVa8fWtGTPKLqWutbT86zhW1bzmlqi6xm4NUWXdG+WHnfXO3Oaourk9G6PKmt+ZFVXWPGd2m3ML1KPW799ZM9+Kqpr/drV/FiQzKt5bzqv4z/vkrbfnlV1C3Ztf8f/Pb701J6ru7Qr/LEzmryS9UV2HCm+99a9vkg+uN6zsUgBYSaRzy8CBA8suAzrVG+3ysRFll1LX1j227AoA6qc3aqjV8UcyLS0t8cILL0T//v2joaFhmaTSw4YNi2nTpsWAAQOWSY1djWPYeY5h5zmGndcVj2E6HaaT5pprrhnduhndQ33SG1WPY9h5jmHnOYad1xWPYa2dvVFdj1RIf7G11lprmb9u+ibpKt8oy4tj2HmOYec5hp3X1Y6hEQrUO71RdTmGnecYdp5j2Hld7RgObEdv5KMYAAAAIItQAQAAAMgiVFhIU1NTnHjiicVX8jiGnecYdp5j2HmOIZD4WdB5jmHnOYad5xh2nmMYK+dCjQAAAEB5jFQAAAAAsggVAAAAgCxCBQAAACCLUGEhP/nJT2LdddeNXr16xZZbbhkPPPBA2SXVjUmTJsXmm28e/fv3j9VWWy322GOPmDp1atll1a3TTjstGhoa4ogjjii7lLrz/PPPx3777ReDBw+O3r17x+jRo+Ohhx4qu6y60NzcHCeccEKst956xbH7wAc+EBMnTgxL70DXpTfKpzda9vRHefRGnaM/Wjqhwv+66qqr4qijjipW9JwyZUp89KMfjZ133jleeeWVskurC3fccUeMGzcu7rvvvrjlllti3rx58clPfjJmzZpVdml158EHH4wLLrggNtxww7JLqTtvvPFGjBkzJnr06BF//OMf47//+7/jzDPPjEGDBpVdWl04/fTT47zzzotzzz03nnjiieL2GWecEeecc07ZpQEl0Bt1jt5o2dIf5dEbdZ7+aOlc/eF/pfQ9pcnpmyVpaWmJYcOGxWGHHRbHHXdc2eXVnVdffbVI5dMJdZtttim7nLoxc+bM2GSTTeKnP/1pnHzyybHRRhvFWWedVXZZdSP9W/3zn/8cd911V9ml1KXPfOYzsfrqq8fPf/7zBfd9/vOfL1L5X/3qV6XWBqx4eqNlS2+UT3+UT2/UefqjpTNSISLmzp0bkydPjh133HHBfd26dStu33vvvaXWVq+mT59efF1llVXKLqWupE80dt111zbfi7Tf9ddfH5tttlnstddeReO28cYbx0UXXVR2WXVj6623jltvvTWefPLJ4vajjz4ad999d3zqU58quzRgBdMbLXt6o3z6o3x6o87THy1d93bss9J77bXXirkyKYFaWLr917/+tbS66lX6JCPNdUtDrUaNGlV2OXXjyiuvLIaXpuF95HnmmWeK4WlpuO53vvOd4lgefvjh0bNnzxg7dmzZ5dXFpxkzZsyI4cOHR2NjY/Fz8ZRTTol999237NKAFUxvtGzpjfLpjzpHb9R5+qOlEyqwXNLkxx9/vEjwaJ9p06bF+PHjizmXaTEs8pu2lMafeuqpxe2UxqfvxfPPP9+Jsx2uvvrquOyyy+Lyyy+Pj3zkI/HII48UTfCaa67p+AF0gt4oj/6o8/RGnac/WjqhQkQMGTKkSJ1efvnlNven22ussUZpddWjQw89NG644Ya48847Y6211iq7nLqRhpimha/SfMFWKQVNxzHNZZ0zZ07xPcp7Gzp0aIwcObLNfSNGjIhrrrmmtJrqyTHHHFOk8fvss09xO60O/Y9//KNYwdxJE7oWvdGyozfKpz/qPL1R5+mPls6aChHF8J9NN920mCuzcKqXbm+11Val1lYv0nqf6aR57bXXxp/+9Kfikiu03w477BCPPfZYkXy2bilVTsOq0p+dMNsnDSt99+W60vy3ddZZp7Sa6sns2bOLOdMLS9976ech0LXojTpPb9R5+qPO0xt1nv5o6YxU+F9pnlFKmtIPqi222KJYUTZd8mf//fcvu7S6GdaXhgRdd911xfWYX3rppeL+gQMHFiuj8t7SMXv3HMu+ffsW1xM297L9jjzyyGIxnTTEb++99y6up37hhRcWG0u32267FXME11577WJ438MPPxw//OEP44ADDii7NKAEeqPO0Rt1nv6o8/RGnac/aod0SUn+5ZxzzqmtvfbatZ49e9a22GKL2n333Vd2SXUjfSstbrv44ovLLq1ubbvttrXx48eXXUbd+f3vf18bNWpUrampqTZ8+PDahRdeWHZJdWPGjBnF91z6OdirV6/a+uuvXzv++ONrc+bMKbs0oCR6o3x6o+VDf9RxeqPO0R8tXUP6T3vCBwAAAICFWVMBAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABVjJf+9rXYo899lhwe7vttosjjjhihddx++23R0NDQ7z55psr/L0BAFrpjWD5EirACjyhpRNJ2nr27Bkf/OAH4/vf/37Mnz9/ub7vb3/725g4cWK79nWyAwBWFL0RrBy6l10AdCW77LJLXHzxxTFnzpz4wx/+EOPGjYsePXrEhAkT2uw3d+7c4uS6LKyyyirL5HUAAJY1vRHUPyMVYAVqamqKNdZYI9ZZZ504+OCDY8cdd4zrr79+wbC8U045JdZcc83YYIMNiv2nTZsWe++9d7zvfe8rToC77757PPvsswter7m5OY466qji8cGDB8e3v/3tqNVqbd7z3UP80kn72GOPjWHDhhX1pE8Ffv7znxevu/322xf7DBo0qEjlU11JS0tLTJo0KdZbb73o3bt3fPSjH43f/OY3bd4nNQIf/vCHi8fT6yxcJwDA4uiNoP4JFaBE6SSTkvfk1ltvjalTp8Ytt9wSN9xwQ8ybNy923nnn6N+/f9x1113x5z//Ofr161ck+q3POfPMM+OSSy6JX/ziF3H33XfH66+/Htdee+17vudXv/rVuOKKK+LHP/5xPPHEE3HBBRcUr5tOpNdcc02xT6rjxRdfjLPPPru4nU6a//Ef/xHnn39+/OUvf4kjjzwy9ttvv7jjjjsWnOD33HPP2G233eKRRx6JAw88MI477rjlfPQAgJWN3gjqUA1YIcaOHVvbfffdiz+3tLTUbrnlllpTU1Pt6KOPLh5bffXVa3PmzFmw/y9/+cvaBhtsUOzbKj3eu3fv2s0331zcHjp0aO2MM85Y8Pi8efNqa6211oL3Sbbddtva+PHjiz9PnTo1RfXFey/ObbfdVjz+xhtvLLjvnXfeqfXp06d2zz33tNn361//eu1LX/pS8ecJEybURo4c2ebxY489dpHXAgBopTeClYM1FWAFSil7Sr5T0p6GzX35y1+O733ve8X8wdGjR7eZK/joo4/G008/XaTxC3vnnXfib3/7W0yfPr1IzLfccssFj3Xv3j0222yzRYb5tUpJeWNjY2y77bbtrjnVMHv27Nhpp53a3J8+Edh4442LP6dUf+E6kq222qrd7wEAdE16I6h/QgVYgdJ8uvPOO684Qab5gelE16pv375t9p05c2Zsuummcdllly3yOquuumr2kMKOSnUkN954Y7z//e9v81iadwgAkEtvBPVPqAArUDo5psV/2mOTTTaJq666KlZbbbUYMGDAYvcZOnRo3H///bHNNtsUt9MlmCZPnlw8d3FS4p8+BUjz/dJCSO/W+mlAWuSo1ciRI4sT5HPPPbfEFH/EiBHFokoLu++++9r19wQAui69EdQ/CzVCRe27774xZMiQYlXjtBjR3//+9+JayYcffnj885//LPYZP358nHbaafG73/0u/vrXv8YhhxzyntdRXnfddWPs2LFxwAEHFM9pfc2rr766eDytvJxWNk5DEV999dUiiU9DDI8++uhiAaJLL720GF44ZcqUOOecc4rbyTe/+c146qmn4phjjikWMrr88suLRZIAAJYVvRFUk1ABKqpPnz5x5513xtprr12sHpwS769//evFvMHWdP5b3/pWfOUrXylOhmmeXjrJfe5zn3vP101DDL/whS8UJ9nhw4fHQQcdFLNmzSoeS0P4TjrppGJ14tVXXz0OPfTQ4v6JEyfGCSecUKx0nOpIqyynIX/pMkpJqjGtjpxOxumSSmkl5FNPPXW5HyMAoOvQG0E1NaTVGssuAgAAAKg/RioAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABEjv8fsXORDiuh0nkAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  },
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3 (ipykernel)"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
